/*!
 * \file PorterDefs.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader数据Porter接口定义文件
 * 
 * \details 本文件定义了WonderTrader数据Porter接口的核心数据结构和回调函数类型：
 *          - 扩展Parser回调函数定义
 *          - 扩展Dumper回调函数定义
 *          - Parser事件类型定义
 *          - 数据结构前向声明
 *          - 跨语言调用支持
 *          
 *          主要功能：
 *          - Parser事件回调：初始化、连接、断开、释放
 *          - Parser订阅回调：合约订阅和退订
 *          - Dumper数据导出回调：K线、tick、Level2数据
 *          - 支持多种数据类型：订单队列、订单明细、逐笔成交
 */
#pragma once

#include <stdint.h>
#include "../Includes/WTSTypes.h"

NS_WTP_BEGIN
struct WTSTickStruct;
struct WTSBarStruct;
struct WTSOrdDtlStruct;
struct WTSOrdQueStruct;
struct WTSTransStruct;
NS_WTP_END

USING_NS_WTP;

//////////////////////////////////////////////////////////////////////////
//扩展Parser回调定义

/**
 * @brief Parser初始化事件
 * @details Parser完成初始化时触发的事件
 */
static const WtUInt32	EVENT_PARSER_INIT = 1;

/**
 * @brief Parser连接事件
 * @details Parser成功连接到数据源时触发的事件
 */
static const WtUInt32	EVENT_PARSER_CONNECT = 2;

/**
 * @brief Parser断开连接事件
 * @details Parser与数据源断开连接时触发的事件
 */
static const WtUInt32	EVENT_PARSER_DISCONNECT = 3;

/**
 * @brief Parser释放事件
 * @details Parser资源释放时触发的事件
 */
static const WtUInt32	EVENT_PARSER_RELEASE = 4;

/**
 * @brief Parser事件回调函数类型
 * @details 用于处理Parser各种事件的回调函数类型定义
 * @param evtId 事件ID（EVENT_PARSER_INIT/CONNECT/DISCONNECT/RELEASE）
 * @param id Parser标识符
 */
typedef void(PORTER_FLAG *FuncParserEvtCallback)(WtUInt32 evtId, const char* id);

/**
 * @brief Parser订阅回调函数类型
 * @details 用于处理Parser合约订阅和退订的回调函数类型定义
 * @param id Parser标识符
 * @param fullCode 完整合约代码
 * @param isForSub 是否为订阅操作（true为订阅，false为退订）
 */
typedef void(PORTER_FLAG *FuncParserSubCallback)(const char* id, const char* fullCode, bool isForSub);


//////////////////////////////////////////////////////////////////////////
//扩展Dumper回调定义

/**
 * @brief K线数据导出回调函数类型
 * @details 用于导出历史K线数据的回调函数类型定义
 * @param id Dumper标识符
 * @param stdCode 标准合约代码
 * @param period K线周期（如1m、5m、1d等）
 * @param bars K线数据数组
 * @param count K线数据数量
 * @return bool 导出是否成功
 */
typedef bool(PORTER_FLAG *FuncDumpBars)(const char* id, const char* stdCode, const char* period, WTSBarStruct* bars, WtUInt32 count);

/**
 * @brief tick数据导出回调函数类型
 * @details 用于导出历史tick数据的回调函数类型定义
 * @param id Dumper标识符
 * @param stdCode 标准合约代码
 * @param uDate 交易日期（格式：YYYYMMDD）
 * @param ticks tick数据数组
 * @param count tick数据数量
 * @return bool 导出是否成功
 */
typedef bool(PORTER_FLAG *FuncDumpTicks)(const char* id, const char* stdCode, WtUInt32 uDate, WTSTickStruct* ticks, WtUInt32 count);

/**
 * @brief 订单队列数据导出回调函数类型
 * @details 用于导出历史订单队列数据的回调函数类型定义
 * @param id Dumper标识符
 * @param stdCode 标准合约代码
 * @param uDate 交易日期（格式：YYYYMMDD）
 * @param items 订单队列数据数组
 * @param count 订单队列数据数量
 * @return bool 导出是否成功
 */
typedef bool(PORTER_FLAG *FuncDumpOrdQue)(const char* id, const char* stdCode, WtUInt32 uDate, WTSOrdQueStruct* items, WtUInt32 count);

/**
 * @brief 订单明细数据导出回调函数类型
 * @details 用于导出历史订单明细数据的回调函数类型定义
 * @param id Dumper标识符
 * @param stdCode 标准合约代码
 * @param uDate 交易日期（格式：YYYYMMDD）
 * @param items 订单明细数据数组
 * @param count 订单明细数据数量
 * @return bool 导出是否成功
 */
typedef bool(PORTER_FLAG *FuncDumpOrdDtl)(const char* id, const char* stdCode, WtUInt32 uDate, WTSOrdDtlStruct* items, WtUInt32 count);

/**
 * @brief 逐笔成交数据导出回调函数类型
 * @details 用于导出历史逐笔成交数据的回调函数类型定义
 * @param id Dumper标识符
 * @param stdCode 标准合约代码
 * @param uDate 交易日期（格式：YYYYMMDD）
 * @param items 逐笔成交数据数组
 * @param count 逐笔成交数据数量
 * @return bool 导出是否成功
 */
typedef bool(PORTER_FLAG *FuncDumpTrans)(const char* id, const char* stdCode, WtUInt32 uDate, WTSTransStruct* items, WtUInt32 count);
